import { Component } from 'vue'
import { Widget } from '../models'

export * from './WidgetType'
export * from './WidgetOption'
export * from './WidgetData'

/** 控件风格: 签署/填写 */
export enum WidgetStyle {
  /** 未知 */
  UNKNOWN = 'unknown',
  /** 签署控件 */
  SIGN = 'sign',
  /** 填写控件 */
  FILL = 'fill'
}

/** 控件模式: 设置/使用/查看/完成 */
export enum WidgetMode {
  /** 设置模式，如指定控件位置和设置控件信息 */
  SET = 'set',
  /** 使用模式，如填写和签署 */
  USE = 'use',
  /** 查看模式，如控件预览 */
  VIEW = 'view',
  /** 完成模式，如预览已填写定稿的控件 */
  DONE = 'done'
}

/** 控件种类: 普通/骑缝/批量 */
export enum WidgetKind {
  /** 普通控件 */
  NORMAL = 1,
  /** 骑缝控件 */
  RIDING = 2,
  /** 批量控件 */
  BATCH = 3
}

/** 获取控件组件 */
export type GetWidgetComponent = (widget: Widget) => Component | undefined

/** 控件操作菜单 */
export interface WidgetMenuItem {
  /** 菜单文本 */
  text: string

  /** 菜单图标 */
  icon?: string

  /** 是否启用 */
  enable?: boolean

  /** 点击触发 */
  handler: () => void

  // eslint-disable-next-line
  [key: string]: any
}

/** 控件错误 */
export interface WidgetError extends Error {
  /** 未通过校验的控件 */
  invalidWidgets: Widget[]
}
